package contracts.program

import org.springframework.cloud.contract.spec.Contract

Contract.make {
    request {
        method 'GET'
        url value(consumer(regex('/api/diff/programs/[0-9]+/history')),
                producer('/api/diff/programs/1/history'))

    }
    response {
        status 200
        headers {
            header('Content-Type', 'application/json;charset=UTF-8')
        }
        body("""
                 [{
                    "programId":1,
                    "startTime":"2019-09-12",
                    "endTime":"2019-10-12",
                    "category":"paid",
                    "introduction":"introduction",
                    "username":"zhang",
                    "studentLink":true,
                    "tutorLink":true,
                    "isReadOnly":true,
                    "isExpired":true,
                    "available":true,
                    "operatorId":1,
                    "title":"title",
                    "operation":"UPDATE"
                 }] 
                """
        )
        bodyMatchers {
            jsonPath('$.[*]', byType())
            jsonPath('$.[*].programId', byRegex(number()))
            jsonPath('$.[*].startTime', byRegex("[\\s\\S]+"))
            jsonPath('$.[*].endTime', byRegex("[\\s\\S]+"))
            jsonPath('$.[*].category', byRegex("[\\s\\S]+"))
            jsonPath('$.[*].introduction', byRegex("[\\s\\S]+"))
            jsonPath('$.[*].username', byRegex("[\\s\\S]+"))
            jsonPath('$.[*].studentLink', byRegex(nonEmpty()))
            jsonPath('$.[*].tutorLink', byRegex(nonEmpty()))
            jsonPath('$.[*].isReadOnly', byRegex(nonEmpty()))
            jsonPath('$.[*].isExpired', byRegex(nonEmpty()))
            jsonPath('$.[*].available', byRegex(nonEmpty()))
            jsonPath('$.[*].title', byRegex("[\\s\\S]+"))
            jsonPath('$.[*].operation', byRegex("[\\s\\S]+"))
        }
    }
}
